﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using PGI.EN.Categoria;
using PGI.LN.Categoria;

namespace PGI.WF
{
    public partial class FrmCategoriaMantenimiento : Form
    {
       private CategoriaEn categEn = null;

        public static int nodoSeleccionado = -1;
        public static string nodoSeleccionadoTxt = "";

        public FrmCategoriaMantenimiento()
        {
            InitializeComponent();
        }

        private void LlenarTreeView()
        {
            List<CategoriaEn> lstCategorias = CategoriaLn.Categorias_Padres();

            LlenarNodo(lstCategorias, null);
        }

        private void LlenarNodo(List<CategoriaEn> ItemsCat, TreeNode nodocat)
        {
            int raizID = nodocat != null
                ? (int)nodocat.Tag
                : 0;

            TreeNodeCollection nodoColeccion = nodocat != null
                ? nodocat.Nodes
                : trvCategoria.Nodes;

            foreach(var item in ItemsCat.Where(i => i.SubCategoriaID == raizID))
            {
                TreeNode nuevoNodo = nodoColeccion.Add(item.CategoriaID.ToString(), item.Descripcion);
                nuevoNodo.Tag = item.CategoriaID;

                LlenarNodo(ItemsCat, nuevoNodo);
            }
        }

        private void FrmCategoriaMantenimiento_Load(object sender, EventArgs e)
        {            
            List<CategoriaEn> lstCategoriasEn = CategoriaLn.Categorias_Padres();

            LlenarTreeView();
            trvCategoria.ExpandAll();
        }
        
        private void btEliminarCategoria_Click(object sender, EventArgs e)
        {
            if (nodoSeleccionado != -1)
            {
                if (nodoSeleccionado != 1)
                {
                    DialogResult dr = MessageBox.Show("¿Está seguro de eliminar esta Categoria?", "Eliminación de Categoria", MessageBoxButtons.YesNo);

                    if (dr == DialogResult.Yes)
                    {
                        int resElimina = 0;
                        int usuarioID = 1;

                        resElimina = CategoriaLn.EliminarCategoria(nodoSeleccionado,usuarioID);

                        if (resElimina != 0)
                        {
                            MessageBox.Show(this, "Categoria eliminada exitosamente.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            
                            trvCategoria.Nodes.Clear();
                            FrmCategoriaMantenimiento_Load(sender, e);
                            nodoSeleccionado = -1;
                            nodoSeleccionadoTxt = "";
                        }
                        else
                            MessageBox.Show(this, "Se produjo un error al eliminar la categoria. Intentelo nuevamente.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                    MessageBox.Show(this, "No se puede eliminar la categoría general.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
                MessageBox.Show(this, "Debe seleccionar una categoria a ser Eliminada.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);

        }
        

        private void btInsCategoria_Click(object sender, EventArgs e)
        {
            if (nodoSeleccionado != -1)
            {
                FrmCategoriaInsertar frmInsCate = FrmCategoriaInsertar.Instance();
                frmInsCate.EstadoForm = 1;

                frmInsCate.nodoSeleccionado = nodoSeleccionado;
                frmInsCate.nodoSeleccionadoTxt = nodoSeleccionadoTxt;
                
                frmInsCate.ShowDialog();
                frmInsCate.Activate();

                trvCategoria.Nodes.Clear();
                FrmCategoriaMantenimiento_Load(sender, e);
                nodoSeleccionado = -1;
                nodoSeleccionadoTxt = "";
            }
            else
                MessageBox.Show(this, "Debe seleccionar en donde desea insertar una nueva categoria.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);

        }

        private void btEditarCategoria_Click(object sender, EventArgs e)
        {
            if (nodoSeleccionado != -1)
            {

                FrmCategoriaInsertar frmInsCate = FrmCategoriaInsertar.Instance();
                frmInsCate.EstadoForm = 2;

                frmInsCate.nodoSeleccionado = nodoSeleccionado;
                frmInsCate.nodoSeleccionadoTxt = nodoSeleccionadoTxt;

                frmInsCate.ShowDialog();
                frmInsCate.Activate();

                trvCategoria.Nodes.Clear();
                FrmCategoriaMantenimiento_Load(sender, e);

                nodoSeleccionado = -1;
                nodoSeleccionadoTxt = "";

            }
            else
                MessageBox.Show(this, "Debe seleccionar una categoria a Editar.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);

        }

        private void FrmCategoriaMantenimiento_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F2)
            {
                btInsCategoria_Click(sender, e);
            }
            if (e.KeyCode == Keys.F3)
            {
                btEditarCategoria_Click(sender, e);
            }
            if (e.KeyCode == Keys.F4)
            {
                btEliminarCategoria_Click(sender, e);
            }
            if (e.KeyCode == Keys.Escape)
            {
                this.Dispose();
            }
        }

        private void trvCategoria_AfterSelect(object sender, TreeViewEventArgs e)
        {
            nodoSeleccionado = Convert.ToInt32(e.Node.Name);
            nodoSeleccionadoTxt = e.Node.Text;
        }

        
        
    }
}
